package top.bug.blog.common;

import top.bug.blog.enums.ErrorCode;
import lombok.Data;

/**
 * @author <a href="https://github.com/jiusi66">九思.</a>
 * @email 10837907@qq.com
 * @from <a href="https://www.52bug.top">递归茶馆-www.52bug.top</a>
 * @description 通用响应实体
 */
@Data
public class Result<T> {

    /**
     * 操作代码
     */
    Integer code;

    /**
     * 提示信息
     */
    String message;

    /**
     * 结果数据
     */
    T data;

    public Result(ErrorCode resultCode) {
        this.code = resultCode.code();
        this.message = resultCode.message();
    }

    public Result(ErrorCode resultCode, T data) {
        this.code = resultCode.code();
        this.message = resultCode.message();
        this.data = data;
    }

    public Result(String message) {
        this.message = message;
    }

    public Result(ErrorCode resultCode, String message) {
        this.code = resultCode.getCode();
        this.message = message;
    }

    /**
     * 成功返回封装-无数据
     */
    public static Result<Void> success() {
        return new Result<>(ErrorCode.SUCCESS);
    }

    /**
     * 成功返回封装-带数据
     */
    public static <T> Result<T> success(T data) {
        return new Result<T>(ErrorCode.SUCCESS, data);
    }

    /**
     * 失败返回封装-使用默认提示信息
     */
    public static Result<Void> fail() {
        return new Result<Void>(ErrorCode.FAIL);
    }

    /**
     * 失败返回封装-使用返回结果枚举提示信息
     */
    public static Result<Void> fail(ErrorCode resultCode) {
        return new Result<>(resultCode);
    }

    /**
     * 失败返回封装-使用自定义提示信息
     */
    public static Result<Void> fail(String message) {
        return new Result<>(message);
    }

    /**
     * 失败返回封装-使用自定义提示信息
     */
    public static Result<Void> fail(ErrorCode code, String message) {
        return new Result<>(code, message);
    }
}